Mybatis实现存取Mysql的Json字段映射Java对象 您所在的位置:网站首页 mybatis 保存对象 Mybatis实现存取Mysql的Json字段映射Java对象

Mybatis实现存取Mysql的Json字段映射Java对象

2023-12-31 01:35| 来源: 网络整理| 查看: 265

Mybatis实现存取Mysql的Json字段映射Java对象 一、需求二、解决方案

一、需求

在业务比较复杂的项目模块,为了应对多样化的场景,我们通常会在mysql中采用json格式来存储相应的信息。使用json格式存储数据有它的优缺点,在这里我们就不细说了,有兴趣的朋友可以去查一下。

在进行开发的过程中,我们是希望在mysql中查询出的json格式数据直接映射成java对象;而java对象也可以转换成json格式数据进行存储;在这里记录一下我们如何实现这样的需求。

二、解决方案

定义一个JsonTypeHandler类,继承于org.apache.ibatis.type.BaseTypeHandler,代码如下:

public class JsonTypeHandler extends BaseTypeHandler { private static final ObjectMapper mapper = new ObjectMapper(); private Class clazz; public JsonTypeHandler(Class clazz) { if (clazz == null) throw new IllegalArgumentException("Type argument cannot be null"); this.clazz = clazz; } @Override public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, this.toJson(parameter)); } @Override public T getNullableResult(ResultSet rs, String columnName) throws SQLException { return this.toObject(rs.getString(columnName), clazz); } @Override public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return this.toObject(rs.getString(columnIndex), clazz); } @Override public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return this.toObject(cs.getString(columnIndex), clazz); } private String toJson(T object) { try { return mapper.writeValueAsString(object); } catch (Exception e) { throw new RuntimeException(e); } } private T toObject(String content, Class clazz) { if (content != null && !content.isEmpty()) { try { return (T) mapper.readValue(content, clazz); } catch (Exception e) { throw new RuntimeException(e); } } else { return null; } } static { mapper.configure(SerializationConfig.Feature.WRITE_NULL_MAP_VALUES, false); mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL); } }

用法:

入库:#{jsonDataField, typeHandler=com.tiptimes.oa.system.util.JsonTypeHandler} 出库:

通过以上的配置就可以实现我们想要的功能,亲测有效。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有